package com.bootdo.system.controller;

import com.bootdo.system.config.MD5Utils;
import com.bootdo.system.domain.*;
import com.bootdo.system.service.FrontuserService;
import com.bootdo.system.service.JihuomaService;
import com.bootdo.system.service.JihuomatypeService;
import com.bootdo.system.service.ZichanhistoryService;
import com.bootdo.system.utils.R;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

@Controller
public class JihuomaController extends  BaseController{

    @Autowired
    private JihuomaService jihuomaService;
    @Autowired
    private JihuomatypeService jihuomatypeService;
    @Autowired
    private ZichanhistoryService zichanhistoryService;
    @Autowired
    private FrontuserService frontuserService;


    @GetMapping("/jiahuoma/qujihuo")
    public String qijihuo(){

        return "qujihuo";
    }

    @ResponseBody
    @Transactional
    @PostMapping("/jihuoma/jihuo")
    public  R jihuo(String key,HttpServletRequest request){


        //检查key存在不
        JihuomaDO jihuomaDO = jihuomaService.getBykey(key);
        if(jihuomaDO==null){
            return R.error("激活码不存在或已使用");
        }
        //增加时间
        FrontuserDO userDO = getUserDO(request);
        int alltime = userDO.getYouxiaotime() + jihuomaDO.getTimelength();
        userDO.setYouxiaotime(alltime);
        frontuserService.update(userDO);

        //设置失效
        jihuomaDO.setIsuser(1);//使用了
        jihuomaService.update(jihuomaDO);

        return R.ok("激活成功，个人资料可查看激活时长");
    }



    @GetMapping("/jihuoma")
    public String jihuoma(HttpServletRequest request){

        Long userId = getUserId(request);

        List<JihuomaDO> jihuomaDOS = jihuomaService.getUserJihuomaList(userId);
        request.setAttribute("jihuomaDOS",jihuomaDOS);

        return  "jihuoma";
    }
    @GetMapping("/buyjihuoma")
    public String buyjihuoma(HttpServletRequest request){

        List<JihuomatypeDO> jihuomatypeDOS = jihuomatypeService.list(new HashMap<>());

        request.setAttribute("jihuomatypeDOS",jihuomatypeDOS);


        return  "buyjihuoma";
    }

    @GetMapping("/jihuomapay")
    public String jihuomabuy(Integer id, Model model,HttpServletRequest request){

        JihuomatypeDO jihuomatypeDO = jihuomatypeService.get(id);
        model.addAttribute("jihuomatypeDO",jihuomatypeDO);


        return "jihuomapay";
    }

    @Transactional
    @PostMapping("/jihuoma/pay")
    public String jihuomapaypost(PayVO payVO,HttpServletRequest request){

        //必要信息
        JihuomatypeDO jihuomatypeDO = jihuomatypeService.get(payVO.getJihuomatypeid());
        request.setAttribute("jihuomatypeDO",jihuomatypeDO);

        //校验密码  判断null
        FrontuserDO userDO = getUserDO(request);
        String encrypt = MD5Utils.encrypt(userDO.getUsername(), payVO.getPaypass());
        if (StringUtils.isEmpty(payVO.getPaypass())||!encrypt.equals(userDO.getPaypass())) {
            request.setAttribute("tip", "支付密码错误");

            return "jihuomapay";
        }

        //资产减少
        final BigDecimal yue = userDO.getZichan().subtract(jihuomatypeDO.getJihuomaprice());
        if (yue.compareTo(BigDecimal.ZERO) < 0) {
            request.setAttribute("tip", "金额超过账户余额");

            return "jihuomapay";
        }
        //历史记录
        ZichanhistoryDO zichanhistoryDO = new ZichanhistoryDO();
        zichanhistoryDO.setCreatetime(new Date());

        zichanhistoryDO.setAmount(BigDecimal.ZERO.subtract(jihuomatypeDO.getJihuomaprice()));
        zichanhistoryDO.setUserid(userDO.getUserid());
        zichanhistoryDO.setJiaoyitype("购买激活码");
        zichanhistoryService.save(zichanhistoryDO);

        //修改余额
        userDO.setZichan(yue);
        frontuserService.update(userDO);


        //3.新建激活码

        JihuomaDO jihuomaDO = new JihuomaDO();
        jihuomaDO.setUserid(userDO.getUserid());
        jihuomaDO.setKey(UUID.randomUUID().toString().replace("-",""));
        jihuomaDO.setTimelength(jihuomatypeDO.getTimelength());
        jihuomaDO.setIsuser(0);
        jihuomaDO.setCreatetime(new Date());
        jihuomaDO.setDaozhangstatus(1);
        jihuomaDO.setDaozhangtime(new Date());
        jihuomaService.save(jihuomaDO);


        return "redirect:/zichan";
    }
}
